#pragma once
#include <string>
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>

class Util
{
public:
    static int ReadLine(int sock, std::string &line) // 一行一行读取报文
    {
        char ch = '\0';
        while (ch != '\n')
        {
            int n = recv(sock, &ch, 1, 0);
            if (n == 0)
            {
                return 0;
            }
            else if (n < -1)
            {
                return -1;
            }
            else
            {
                if (ch == '\r')
                {
                    recv(sock, &ch, 1, MSG_PEEK); // 窥探后面一个字符
                    if (ch == '\n')
                    {
                        recv(sock, &ch, 1, 0); // 拿走缓冲区中的'\n'直接覆盖ch
                    }
                    else
                    {
                        ch == '\n';
                    }
                }
                line.push_back(ch);
            }
        }
        return line.size();
    }

    static bool cutString(const std::string& str,std::string& key,std::string& value,const std::string& sep)//将一个字符串切分为两个子串
    {   
        int pos=str.find(sep);
        if(pos!=std::string::npos)
        {
            key=str.substr(0,pos);
            value=str.substr(pos+sep.size());
            return true;
        }
        return false;
    }
};